/*
 * Md5.h
 *
 *  Created on: 2015-6-13
 *      Author: heqiandeepin
 */

#ifndef MD5_H_
#define MD5_H_

#include <string>

using namespace std;

namespace utils {
/*!
 * MD5 加密类.
 */
class Md5 {
private:
#define uint8  unsigned char
#define uint32 unsigned long int

	struct md5_context {
		uint32 total[2];uint32 state[4];uint8 buffer[64];
	};

	md5_context mContext;uint8 mDigest[16];

	void process(uint8 data[64]);

public:

	Md5();
	/**
	 * 添加数据
	 */
	void append(uint8 *input, uint32 length);
	/**
	 * 完成计算
	 */
	void finish();
	/**
	 * 获得md5字符串
	 */
	string toString();

	/**
	 * 获得md5数据
	 */
	const unsigned char* getDigest() const;

	/**
	 * 加密数据
	 */
	static string encoder(uint8 *input, uint32 length);
	/**
	 * 加密字符串
	 */
	static string encoder(string& str);
	static string encoder(string str);

};
}
#endif /* MD5_H_ */
